<script>
  function Person(name, age) {
    this.name = name;
    this.age = age
  }
  Person.prototype.say = function () {
    console.log('Hello World')
  }

  function Star(name, age) {
    // #1
    Person.call(this, name, age)
  }

  // 对象之间的赋值会相互影响
  /* Star.prototype = Person.prototype
  Star.prototype.play = function() {
    console.log('玩')
  } */

  // p1 上面啥都有，有 name、有 age（只不过是 undefined）、有 say 方法
  // #2 原型继承（继承的是父类原型上的方法）
  Star.prototype = new Person()
  Star.prototype.constructor = Star
  Star.prototype.play = function() {
    console.log('玩')
  }

  const wsc = new Star('wsc', 30)

  console.log(Star.prototype.constructor === Star)
  console.log(wsc.__proto__.constructor === Star)
  console.log(wsc.constructor === Star)

  // 你说一下对继承的了解？你说一下什么是组合继承？
  // 组合继承 = 盗用构造函数继承（继承的是父类的属性） + 原型继承（父类构造函数原型上的方法）
</script>